/**
 * 
 */
package co.edu.uniquindio.pruebas;

import java.util.Date;
import java.util.List;

import javax.naming.NamingException;

import org.junit.Assert;
import org.junit.Test;

import co.edu.uniquindio.logica.Oferta;
import co.edu.uniquindio.logica.Pais;
import co.edu.uniquindio.logica.Subasta;
import co.edu.uniquindio.logica.Vendedor;

/**
 * 
 * Prueba implementation class for: PruebaSubasta
 * El proposito de esta clase es el probar  la
 * DAO relacionada con la informacion de una subasta.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaSubasta extends PruebaMagnum {

	
	
	public PruebaSubasta() throws NamingException {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada a la subasta para despues verificar
	 * los datos obtenidos atravez de la misma DAO. 
	 * @throws NamingException
	 */
	@Test
	public void testCrudSubasta() throws NamingException 
	{

		Pais pais=new Pais("av123",new Date(),"costaRica");
		paisDao.insert(pais);


		Vendedor vendedor= new Vendedor("1238","asd@hotmail","carlos",pais,"paco","mujer");
		vendedorDao.insert(vendedor);


		Subasta subasta= new Subasta(239,vendedor,5.000000,new Date(),new Date());
		//prueba insert
		subastaDao.insert(subasta);

		//Prueba de búsqueda
		Subasta subastaRecuperada=subastaDao.findByKey(subasta.getNumSubasta());
		Assert.assertEquals(subastaRecuperada.getNumSubasta(), subasta.getNumSubasta());    	

		//prueba actualizacion
		subastaRecuperada.setNumSubasta(5);
		subastaRecuperada.setVendedor(vendedor);
		subastaRecuperada.setPrecioBase(3.000000);
		subastaDao.update(subastaRecuperada);
		subasta=subastaDao.findByKey(subastaRecuperada.getNumSubasta());
		Assert.assertEquals(5,subasta.getNumSubasta());

		//Prueba getAll
		Subasta otraSubasta=new Subasta(2,vendedor,5000000,new Date(),new Date());
		subastaDao.insert(otraSubasta);
		List<Subasta>subastas=subastaDao.getAll();
		Assert.assertTrue(subastas.contains(otraSubasta));
		Assert.assertTrue(subastas.contains(subasta));    	

		//Prueba delete
//		subastaDao.remove(otraSubasta);
//		subastaDao.remove(subasta);
//		subastas=subastaDao.getAll();
//		Assert.assertTrue(!subastas.contains(otraSubasta));
//		Assert.assertTrue(!subastas.contains(subasta));    	


	}
    /**
     * este metodo permite probar el metodo  obtener una lista de ofertas segun un rango
     */
	@Test
	public void testOfertasRango()
	{
		List<Subasta> lista1= subastaDao.ofertasPorRango();
		Assert.assertEquals(lista1.size(), 2);
		for (Subasta subasta : lista1) {
			System.out.println(subasta.getPrecioBase());
		}
	}
	@Test
	public void testRegistros()
	{
		List<Subasta>lista2= subastaDao.contarRegistros();
		Assert.assertEquals(lista2.size(), 1);
	}
 
	@SuppressWarnings("deprecation")
	@Test
    public void testMayorOferta()
    {
    	Oferta ofer= subastaDao.obtenerMayorOferta();
    	Assert.assertEquals(8000000, ofer.getValor());
    }
	
}
